<?php
App::uses('AppModel', 'Model');
/**
 * Cita Model
 *
 * @property Lugar $Lugar
 * @property Usuario $Usuario
 * @property ClaseReproduccion $ClaseReproduccion
 * @property Fuente $Fuente
 * @property Especie $Especie
 * @property CriterioSeleccionCita $CriterioSeleccionCita
 * @property CitaHistorico $CitaHistorico
 * @property Fichero $Fichero
 */
class Cita extends AppModel {

	/**
	 * Use database config
	 *
	 * @var string
	 */
	public $useDbConfig = 'default';

	/**
	 * Use table
	 *
	 * @var mixed False or table name
	 */
	public $useTable = 'cita';

	//The Associations below have been created with all possible keys, those that are not needed can be removed

	/**
	 * belongsTo associations
	 *
	 * @var array
	 */
	public $belongsTo = array(
		'Lugar' => array(
			'className' => 'Lugar',
			'foreignKey' => 'lugar_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Usuario' => array(
			'className' => 'Usuario',
			'foreignKey' => 'usuario_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'ClaseReproduccion' => array(
			'className' => 'ClaseReproduccion',
			'foreignKey' => 'clase_reproduccion_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Fuente' => array(
			'className' => 'Fuente',
			'foreignKey' => 'fuente_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'Especie' => array(
			'className' => 'Especie',
			'foreignKey' => 'especie_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
		'CriterioSeleccionCita' => array(
			'className' => 'CriterioSeleccionCita',
			'foreignKey' => 'criterio_seleccion_cita_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		)
	);

	/**
	 * hasMany associations
	 *
	 * @var array
	 */
	public $hasMany = array(
		'CitaHistorico' => array(
			'className' => 'CitaHistorico',
			'foreignKey' => 'cita_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		),
		'Fichero' => array(
			'className' => 'Fichero',
			'foreignKey' => 'cita_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		),
		'AsoCitaObservador' => array(
			'className' => 'AsoCitaObservador',
			'foreignKey' => 'cita_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		),
		'AsoCitaClaseEdadSexo' => array(
			'className' => 'AsoCitaClaseEdadSexo',
			'foreignKey' => 'cita_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		)
	);
	
	/*
	 * Funciones
	 */
	
	/**
	 * Obtiene toda la información de la cita por id
	 */
	public function obtenerTodoPorId($id_cita) {
		
		$cita = $this -> find(
			'first', 
			array(
				'conditions'=>array('Cita.id'=>$id_cita)
			)
		);
		
		return $cita;
	}
	
	/**
	 * Obtiene los distintos años en los que se han dado citas ordenados descendentemente
	 */
	public function obtenerAniosCitas() {
		
		$anios = $this -> find(
			'all', 
			array(
				'fields'=>array('DISTINCT(YEAR(Cita.fechaAlta)) AS anio'),
				'order'=>array('anio DESC'),
				'recursive' => -1
			)
		);
		
		return $anios;
	}
	
	/**
	 * Obtiene las citas provinciales por mes
	 * 
	 * @param number $especie_id
	 */
	public function obtenerCitasProvincialesPorIntervaloAnios($especie_id, $anio_desde, $anio_hasta, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'YEAR(Cita.fechaAlta) >='=>$anio_desde, 'YEAR(Cita.fechaAlta) <='=>$anio_hasta),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes'),
				'recursive'=>-1
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasProvincialesPorAnio($especie_id, $anio, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'YEAR(Cita.fechaAlta)'=>$anio),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes'),
				'recursive'=>-1
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasProvincialesPorIntervaloFechas($especie_id, $fecha_desde, $fecha_hasta, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, "Cita.fechaAlta >= STR_TO_DATE('$fecha_desde','%d/%m/%Y')", "Cita.fechaAlta <= STR_TO_DATE('$fecha_hasta','%d/%m/%Y')"),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes'),
				'recursive'=>-1
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasPorMunicipioIntervaloAnios($especie_id, $municipio, $anio_desde, $anio_hasta, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Lugar.municipio_id'=>$municipio, 'YEAR(Cita.fechaAlta) >='=>$anio_desde, 'YEAR(Cita.fechaAlta) <='=>$anio_hasta),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes')
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasPorMunicipioYAnio($especie_id, $municipio, $anio, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Lugar.municipio_id'=>$municipio, 'YEAR(Cita.fechaAlta)'=>$anio),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes')
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasPorMunicipioIntervaloFechas($especie_id, $municipio, $fecha_desde, $fecha_hasta, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Lugar.municipio_id'=>$municipio, "Cita.fechaAlta >= STR_TO_DATE('$fecha_desde','%d/%m/%Y')", "Cita.fechaAlta <= STR_TO_DATE('$fecha_hasta','%d/%m/%Y')"),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes')
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasPorLugarIntervaloAnios($especie_id, $lugar, $anio_desde, $anio_hasta, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Cita.lugar_id'=>$lugar, 'YEAR(Cita.fechaAlta) >='=>$anio_desde, 'YEAR(Cita.fechaAlta) <='=>$anio_hasta),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes'),
				'recursive'=>-1
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasPorLugarYAnio($especie_id, $lugar, $anio, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Cita.lugar_id'=>$lugar, 'YEAR(Cita.fechaAlta)'=>$anio),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes'),
				'recursive'=>-1
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasPorLugarIntervaloFechas($especie_id, $lugar, $fecha_desde, $fecha_hasta, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Cita.lugar_id'=>$lugar, "Cita.fechaAlta >= STR_TO_DATE('$fecha_desde','%d/%m/%Y')", "Cita.fechaAlta <= STR_TO_DATE('$fecha_hasta','%d/%m/%Y')"),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes'),
				'recursive'=>-1
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	
	public function obtenerCitasPorCuadriculaUtmIntervaloAnios($especie_id, $cuadricula_utm, $anio_desde, $anio_hasta, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Lugar.cuadricula_utm_id'=>$cuadricula_utm, 'YEAR(Cita.fechaAlta) >='=>$anio_desde, 'YEAR(Cita.fechaAlta) <='=>$anio_hasta),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes')
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasPorCuadriculaUtmYAnio($especie_id, $cuadricula_utm, $anio, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Lugar.cuadricula_utm_id'=>$cuadricula_utm, 'YEAR(Cita.fechaAlta)'=>$anio),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes')
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerCitasPorCuadriculaUtmIntervaloFechas($especie_id, $cuadricula_utm, $fecha_desde, $fecha_hasta, $selectField) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id, 'Lugar.cuadricula_utm_id'=>$cuadricula_utm, "Cita.fechaAlta >= STR_TO_DATE('$fecha_desde','%d/%m/%Y')", "Cita.fechaAlta <= STR_TO_DATE('$fecha_hasta','%d/%m/%Y')"),
				'fields'=>array("$selectField AS cantidad", "MONTH(Cita.fechaAlta) AS mes"),
				'order'=>array('mes ASC'),
				'group'=>array('mes')
			)
		);
		
		// Rellenamos un array con los valores para los 12 meses
		$out = array(0,0,0,0,0,0,0,0,0,0,0,0);
		foreach ($citas as $cita) {
			$out[$cita[0]['mes'] - 1] = $cita[0]['cantidad'];
		}
		
		return $out;
	}
	
	public function obtenerTotalCitasPorMunicipio($especie_id) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id),
				'fields'=>array('COUNT(Cita.id) as total', 'Lugar.municipio_id as municipio'),
				'group'=>array('municipio')
			)
		);
		
		return $citas;
	}
	
	public function obtenerTotalCitasPorCuadriculaUtm($especie_id) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id),
				'fields'=>array('COUNT(Cita.id) as total', 'Lugar.cuadricula_utm_id as cudriculaUtm'),
				'group'=>array('cudriculaUtm')
			)
		);
		
		return $citas;
	}
	
	public function obtenerTipoCriaPorMunicipio($especie_id) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id),
				'fields'=>array('Lugar.municipio_id', 'MAX(ClaseReproduccion.idTipoCria) as tipoCria'),
				'group'=>array('Lugar.municipio_id')
			)
		);
		
		return $citas;
	}
	
	public function obtenerTipoCriaPorCuadriculaUtm($especie_id) {
		
		$citas = $this -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie_id),
				'fields'=>array('Lugar.cuadricula_utm_id', 'MAX(ClaseReproduccion.idTipoCria) as tipoCria'),
				'group'=>array('Lugar.cuadricula_utm_id')
			)
		);
		
		return $citas;
	}
}
